// 调用百度文心一言AI
const { ChatCompletion, setEnvVariable } = require('@baiducloud/qianfan');
setEnvVariable('QIANFAN_AK', 'iXHy2olZZEUEqFJYZVWRtYXg');
setEnvVariable('QIANFAN_SK', 'pnaK2VptfI8nuvg5LWDkN9ihwGCb9n5q');
const chatClient = new ChatCompletion();

// 存储用户问题的上下文记录列表
let questionContext = []

// 调用百度图像识别
const AipImageClassifyClient = require('baidu-aip-sdk').imageClassify
// 设置APPID/AK/SK
const APP_ID = '115896607';
const API_KEY = 'itwaYam7dsl6nF1oqBXWVeag';
const SECRET_KEY = 'rx2GqegnnAIuWCH82bIf54zknR4ZWmI6';
const imageClient = new AipImageClassifyClient(APP_ID, API_KEY, SECRET_KEY);

// 使用临时内存存储图片
const multer = require('multer')
const path = require('path')

// 配置multer存储引擎，这里使用内存存储作为临时存储
const storage = multer.memoryStorage()
const upload = multer({ storage: storage })

// AI旅行助手对话
const aiAssistantChat = async (req, res) => {
  try {
    // 获取用户输入的问题
    const question = req.query.question

    // 问题为空返回错误
    if (!question) {
      return res.status(400).json({
        title: '用户问题不能为空'
      })
    }

    // 更新用户问题的上下文记录列表
    questionContext.push({ role: 'user', content: question })

    // 调用AI对话
    const response = await chatClient.chat({
      messages: questionContext
    }, 'ERNIE-Tiny-8K')

    // 更新用户问题的上下文记录列表
    questionContext.push({ role: 'assistant', content: response.result })

    // 返回成功响应
    res.status(200).json({
      title: 'AI助手对话回答',
      data: response.result
    })

    if (questionContext.length > 10) {
      questionContext = []
    }

  } catch (error) {
    res.status(500).json({
      error: error.message
    })
  }
}

// AI识图
const aiRecognizeImage = async (req, res) => {
  try {
    // 封装multer的处理为一个Promise
    return new Promise((resolve, reject) => {
      // 使用 multer 的 single 方法处理名为 'file' 的文件上传字段  
      upload.single('image')(req, null, (err) => {
        if (err) {
          reject(err) //如果multer出错，直接拒绝Promise
        } else if (!req.file) {
          return res.status(400).json({
            err: '没有选择文件上传'
          })
        } else {
          resolve(req)  //如果成功，将req传递给下一个步骤
        }
      });
    }).then(async (req) => {
      // 文件信息  
      const file = req.file.buffer;

      // 将图片转化为base64
      const imageBase64 = file.toString('base64')

      // 图片为空返回错误
      if (!imageBase64) {
        return res.status(400).json({
          title: '图片不能为空'
        })
      }

      // 调用AI识图
      const recognizeResult = await imageClient.advancedGeneral(imageBase64)

      // 返回成功响应
      res.status(200).json({
        title: 'AI识图结果',
        data: recognizeResult.result
      })
    })
  } catch (error) {
    res.status(500).json({
      error: error.message
    })
  }
}

module.exports = {
  aiAssistantChat,
  aiRecognizeImage
}